election_data: archivo con las elecciones al congresocod_mun: archivo con los códigos y nombres de cada municipioabbrev: siglas de cada partidosurveys: encuestas electorales desde 1982.Nos ocupamos primero de las encuestas:
Eliminar los datos de surveys:
se refieran a elecciones anteriores a 2008
sean a pie de urna
tamaño muestral desconocido o inferior a 500.
tenga 1 día o menos de trabajo de campo.
Seguimos con los datos electorales
election_data <-
election_data |>
select(-c(tipo_eleccion,codigo_distrito_electoral,
numero_mesas, vuelta))
#Combinamos los codigos para formar id_municipio
election_data <-
election_data|>
mutate(id_municipio =
glue("{codigo_ccaa}{codigo_provincia}{codigo_municipio}")) |>
relocate(id_municipio, .before=codigo_ccaa)
election_data <-
election_data |>
select(-c(codigo_ccaa,codigo_provincia,
codigo_municipio,participacion_1,participacion_2))-
Utilizamos la variable partidos para agrupar todos ellos en solo 12:
-
resumen <-
election_data |>
mutate('siglas' = case_when(
str_detect(partidos, regex("EZKER BA|ENTESA|PODEM|COMPROMÍS|IZQUIERDA UNIDA|ESQUERRA UNI|ESQUERDA UNI|I\\.U\\.|IU ")) ~ "UP",
str_detect(partidos, "PP|PARTIDO POPULAR|PARTIT POPULAR") ~ "PP",
str_detect(partidos, "PNV|PARTIDO NACIONALISTA VASCO") ~ "PNV",
str_detect(partidos, "PSOE|PSC|PARTIDO SOCIALISTA|PARTIT SOCIALISTA|PARTIT DELS SOCIALISTES |PARTIDO DOS SOCIALISTA") ~ "PSOE",
str_detect(partidos, "MÁS PAÍS|PAÍS|MÉS COMPROM") ~ "MP",
str_detect(partidos, "VOX") ~ "VOX",
str_detect(partidos, "AMAIUR|ARALAR|EUSKO|EUSKAL HERRI|BILDU") ~ "EH-BILDU",
str_detect(partidos, "ERC|ESQUERRA REPUBLICANA DE C|ESQUERRA REPUBLICANA$|ESQUERRA REPUBLICANA/") ~ "ERC",
str_detect(partidos, "BNG|BLOQUE") ~ "BNG",
str_detect(partidos, "CIUTADANS|PARTIDO DE LA CIU") ~ "Cs",
str_detect(partidos, "CONVERGENCIA I| CONVERGENCIA i|CONVERGÈNCIA|UNIÓ D") ~ "CIU",
TRUE ~ "OTROS"
)) -
#Primero tenemos que filtrar el dataset abbrev ya que hay partidos que aceptan múltiples siglas
abbrev_sinrepes <-
abbrev |>
group_by(denominacion) |>
slice(1)
# Ahora juntamos el dataset election_data con abbrev_sinrepes para darle a cada partido su correspondiente abreviatura
resumen_2 <-
election_data |>
left_join(abbrev_sinrepes,
by = c('partidos' = 'denominacion'))
resumen_2 <-
resumen_2 |>
mutate(siglas = case_when(
str_detect(siglas, regex("ARALAR|^EA$|AMAIUR|EH Bildu", ignore_case = TRUE)) ~ 'EH-BILDU',
str_detect(siglas, regex("EB-B|ENTESA|PODEMOS|EZKERRA|UP-UPeC|I\\.U\\.", ignore_case = TRUE)) ~ 'UP',
str_detect(siglas, regex("^PP$|P\\.P-E\\.U\\.|PP-PAR|PP-FORO|PP-UPM", ignore_case = TRUE)) ~ 'PP',
str_detect(siglas, regex("PNV", ignore_case = TRUE)) ~ 'PNV',
str_detect(siglas, regex("PSOE|PSC|PSPC|PSE", ignore_case = TRUE)) ~ 'PSOE',
str_detect(siglas, regex("PAÍS|MÉS COMPROM", ignore_case = TRUE)) ~ 'MP',
str_detect(siglas, regex("VOX", ignore_case = TRUE)) ~ 'VOX',
str_detect(siglas, regex("C's", ignore_case = TRUE)) ~ 'Cs',
str_detect(siglas, regex("CiU|CDC|unio.cat", ignore_case = TRUE)) ~ 'CIU',
str_detect(siglas, regex("ERC", ignore_case = TRUE)) ~ 'ERC',
str_detect(siglas, regex("BNG|NÓS", ignore_case = TRUE)) ~ 'BNG',
# Partidos que no aparecen en abbrev que tenemos que incluir'
str_detect(partidos, regex("PARTIT POPULAR|PARTIDO POPULAR|\\(PP\\)", ignore_case = TRUE)) ~ 'PP',
str_detect(partidos, regex("CIUTADANS|PARTIDO DE LA CIU", ignore_case = TRUE)) ~ 'Cs',
str_detect(partidos, regex("CONVERGÈNCIA I", ignore_case = TRUE)) ~ 'CIU',
str_detect(partidos, regex("IZQUIERDA UNIDA|EZKER ANITZA|ESQUERRA UNIDA|^IU$|PODEMOS|AHAL DUGU|ESQUERDA UNIDA-OS VERDES", ignore_case = TRUE)) ~ 'UP',
str_detect(partidos, regex("PSOE|SOCIALISTA OBRER ESPANYOL|DOS SOCIALISTAS", ignore_case = TRUE)) ~ 'PSOE',
str_detect(partidos, regex("(EH Bildu)|PARTIDO POLITICO ARALAR|EUSKO", ignore_case = TRUE)) ~ 'EH-BILDU',
str_detect(partidos, regex("ESQUERRA REPUBLICANA/CATALUNYA SÍ|ESQUERRA REPUBLICANA$", ignore_case = TRUE)) ~ 'ERC',
TRUE ~ 'OTROS'))resumen_agg <-
resumen |>
group_by(siglas,fecha) |>
summarise(total_votos_resumen = sum(votos, na.rm = TRUE),.groups = "drop")
resumen_2_agg <-
resumen_2 |>
group_by(siglas,fecha) |>
summarise(total_votos_resumen_2 = sum(votos, na.rm = TRUE),.groups = "drop")
#filtramos por aquellos donde hay diferencias
resumen_total<-
resumen_agg |>
inner_join(resumen_2_agg,by=c("siglas","fecha")) |>
mutate(dif=total_votos_resumen-total_votos_resumen_2) |>
filter(dif!=0) |>
arrange(desc(dif))
view(resumen)Resumen le da 630.000 votos a CIU, pero resumen2 solo 65.000, según la web del ministerio del interior obtuvieron 567.000 1En cuanto a los votos en 2015 para UP, si se suman los de Podemos, Coalición “En Comú Podem”, Coalición “Unidad Popular” y Coalición “Compromís - Podemos - És el Moment”, el ministerio de interior dice que obtuvieron 5.700.000 votos, muy cercano al cálculo de resumen, mientras que resumen2 se queda 500.00 votos corto.
Y parecido ocurre para el año 2016 para UP: resumen 4.700.000 vs resumen2 4.200.000 vs ministerio 5.000.000.
Por tanto creemos que la agrupación resumen es más precisa y es la que usaremos para el resto del trabajo.
Mostrar un gráfico con los resultados electorales para cada año.
Vamos a hacerlo con una función para que acumule en orden de votos los gráficos según la fecha porque hemos encontrado muchos problemas para que reordenara correctamente haciéndolo de manera agregada.
# Ordenamos los datos por año y votos descendentes
resumen_agg <-
resumen_agg |>
arrange(fecha, desc(total_votos_resumen))
# Calcular el porcentaje de votos para cada partido en cada año
resumen_agg_pct <-
resumen_agg |>
group_by(fecha) |>
mutate(
total_votos_fecha = sum(total_votos_resumen), # Calcular el total de votos por año
porcentaje_votos = (total_votos_resumen / total_votos_fecha) * 100 # Calcular el porcentaje
) |>
ungroup()
# Reordenamos los partidos dentro de cada año según el porcentaje de votos
resumen_agg_pct <-
resumen_agg_pct |>
group_by(fecha) |>
arrange(desc(porcentaje_votos)) |>
mutate(siglas = factor(siglas, levels = siglas)) |>
ungroup()# Función para generar gráficos individuales por fecha
generar_graficos <- function(datos, colores) {
# Crear una lista vacía para almacenar los gráficos
lista_graficos <- list()
# Obtener las fechas únicas
fechas_unicas <- unique(datos$fecha)
# Iterar sobre cada fecha
for (fecha_actual in fechas_unicas) {
# Filtrar los datos para la fecha actual
datos_filtrados <- datos |>
filter(fecha == fecha_actual) |>
arrange(porcentaje_votos) |>
mutate(siglas = factor(siglas, levels = siglas)) # Reordenar factores solo para esta fecha
# Convertir la fecha al formato año/mes (mes en letras abreviadas)
fecha_formateada <- format(as.Date(fecha_actual), "%b %Y")
# Crear el gráfico para la fecha actual
grafico <- ggplot(datos_filtrados, aes(x = "", y = porcentaje_votos, fill = siglas)) +
geom_col(position = "stack", width = 2.5) + # Barra apilada única
geom_text( # Etiquetas con porcentaje solo si es mayor que 2 para que se vea bien
aes(label = ifelse(porcentaje_votos >= 2, paste0(round(porcentaje_votos, 0), "%"), "")),
position = position_stack(vjust = 0.5), # Centrar el texto dentro de las barras
color = "white", # Texto en color blanco
size = 2.75,
fontface = "bold"
) +
coord_flip() +
scale_fill_manual(values = colores, name = "Partido") + # Usar colores personalizados
labs(
x = NULL,
y = NULL,
title = fecha_formateada
) +
theme_minimal(base_size = 14) +
theme(
axis.text.x = element_blank(), # Eliminar elementos no deseados
axis.ticks.x = element_blank(),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank(),
plot.title = element_text(size = 9, face = "italic"),
legend.position = "none" # Deshabilitar las leyendas individuales
)
# Agregar el gráfico a la lista
lista_graficos[[as.character(fecha_actual)]] <- grafico
}
# Crear el orden de partidos para la leyenda global
orden_leyenda <-
c("PSOE", "PP", "UP","Cs","VOX", "ERC", "PNV", "CIU", "BNG", "EH-BILDU", "MP", "OTROS")
leyenda <-
ggplot(resumen_agg_pct,
aes(x = siglas, y = 1, fill = siglas)) +
geom_bar(stat = "identity", width = 0) + # Asignar valores ficticios a `y`
scale_fill_manual(values = colores, breaks=orden_leyenda,name = "") +
theme_void() +
theme(
legend.position = "bottom", # Colocar la leyenda en la parte inferior
legend.text = element_text(size = 8, family = "Rockwell"), # Ajustar el tamaño del texto en la leyenda
legend.key.width = unit(0.5, "cm"), # Ajustar el ancho de las claves de la leyenda
legend.direction = "horizontal", # Disponer la leyenda horizontalmente
legend.box.spacing = unit(0.5, "cm"), # Espaciado entre los elementos de la leyenda
legend.justification = "center" # Centrar la leyenda
) +
guides(fill = guide_legend(nrow = 1)) # Forzar una sola fila para la leyenda
# Combinar los gráficos en una única columna
grafico_combinado <-
wrap_plots(lista_graficos, ncol = 1) +
plot_annotation(
title = "Porcentaje de votos por partido en cada elección",
theme = theme(plot.title = element_text(hjust = 0.5, size = 16,family = "Rockwell")))
# Añadir la leyenda al diseño final con patchwork
final_plot <-
grafico_combinado + leyenda
return(final_plot)
}
# Llamar a la función con los datos y colores
grafico_final <-
generar_graficos(resumen_agg_pct, colores)¿Qué partido fue el ganador en los municipios con más de 100.000 habitantes (censo) en cada una de las elecciones?
# quitar los guiones que separan el cod_mun para poder unirlo después en base a id_municipio
cod_mun <-
cod_mun |>
mutate(cod_mun = str_replace_all(cod_mun, "-", ""))
ganadores <-
resumen |>
filter(censo > 100000) |>
group_by(fecha, id_municipio) |>
arrange(desc(votos)) |>
slice(1) |>
summarise(partido_ganador = siglas,
max_votos = votos,
censo_municipio = censo) |>
ungroup() |>
left_join(cod_mun, by = c("id_municipio" = "cod_mun"))ganadores_LAU <-
ganadores |>
mutate(id_municipio = substr(id_municipio, 3, 7))
mapa_mas100k_ganadores <-
mapSpain::esp_get_munic() |>
left_join(ganadores_LAU, by = c("LAU_CODE" = "id_municipio"))
ggplot(mapa_mas100k_ganadores) +
geom_sf(aes(fill = partido_ganador), alpha = 0.7, color = "grey") +
scale_fill_manual(
values = colores) +
theme_minimal() +
labs(
fill = "partido_ganador",
title = "Partidos ganadores en municipios de más de cien mil habitantes"
) +
theme(
plot.title = element_text(hjust = 0.5),
legend.position = "bottom"
) +
facet_wrap(~ fecha)¿Qué partido fue el segundo cuando el primero fue el PSOE? ¿Y cuando el primero fue el PP?
# manera 1
primeros_segundos <-
segundos |>
group_by(fecha) |>
mutate(rank = row_number()) |> # Clasificar partidos por votos en cada año
filter(rank <= 2) |> # Filtrar los dos partidos principales de cada año
summarise(
primero = siglas[rank == 1], # partido en primer lugar
votos_1 = total_votos[rank == 1], # Número de votos del primer lugar
segundo = siglas[rank == 2], # partido en segundo lugar
votos_2 = total_votos[rank == 2] # Número de votos del segundo lugar
) |>
ungroup()resultado <-
ggplot(segundos,
aes(x = siglas,
y = total_votos,
fill = siglas)) +
geom_col(alpha = 0.8,
width = 0.7) +
scale_fill_manual(values = colores) +
labs(title = "Los cinco partidos principales en votos por año",
subtitle = "Elecciones después de 2008",
x = "Año y partido",
y = "Número de votos",
fill = "Partido") +
theme_minimal(base_family = "Rockwell") +
theme(axis.text.x = element_text(angle = 50),
axis.title.x = element_blank(),
legend.position = "bottom") +
facet_wrap(~fecha, nrow = 1, scales = "free_x")+
theme(plot.title = element_text(size = 20,face = "bold", , hjust = 0.5),
plot.subtitle = element_text(size = 15),
legend.key.size = unit(0.9, "cm"))# Calcular la participación por municipio
participacion <-
resumen |>
group_by(id_municipio, siglas) |>
summarise(total_votos = sum(votos,
na.rm = TRUE), .groups = "drop") |>
left_join(resumen |>
group_by(id_municipio) |>
summarise(participacion_total = sum(votos,
na.rm = TRUE), .groups = "drop"),
by = "id_municipio") |>
mutate(participacion_relativa = total_votos / participacion_total)
# Calcular la correlación entre participación total y votos relativos
correlacion <-
participacion |>
group_by(siglas) |>
summarise(correlacion = cor(participacion_total, participacion_relativa, use = "complete.obs"))
#Complete.obs se ocupa de los valores NA, no se si hace falta pero por si acaso lo dejo puesto
#Deberían salir nº entre -1 y 1, si está por encima de 0 la correlación es positiva lo que significa que saldría beneficiado si la participación es alta, y al revés con los resultados negativos
#Un coeficiente de correlación POSITIVO significa que, a medida que AUMENTA la participación, la proporción de votos de ese partido tiende a AUMENTAR
#Correlación positiva → Beneficio con alta participación.
#Correlación negativa → Beneficio con baja participación.
#Estamos haciendo la correlación entre estas dos cosas
#Participación total: el total de votos emitidos en un municipio
#Proporción de votos de un partido (participacion relativa): los votos de un partido como fracción de los votos totales.# Visualización de resultados con un gráfico de barras
grafico_corr <-
ggplot(correlacion,
aes(x = reorder(siglas, correlacion),
y = correlacion,
fill = siglas)) +
geom_col() +
scale_fill_manual(values = colores) +
labs(
title = "Correlación entre participación y votos por partido",
subtitle = "La correlación negativa indica que menor participación aumenta los votos",
x = NULL,
y = "Correlación",
fill = "Partidos"
) +
theme_minimal(base_family = "Rockwell")+
theme(plot.title = element_text(size = 18,face = "bold", hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))#Otra manera comparando la participación de los distintos años
#Calculamos la participación total por año, a nivel nacional
participacion_anual <-
resumen |>
group_by(fecha) |>
summarise(participacion_total = sum(votos, na.rm = TRUE))
media_votos_años <-
mean(participacion_anual$participacion_total)
#Clasificamos los años según si la participación ha sido más alta de lo normal, media o más baja
participacion_anual <-
participacion_anual |>
mutate(categoria_participacion = case_when(
participacion_total < media_votos_años ~ "Baja_participacion",
participacion_total >= media_votos_años ~ "Alta_participacion" ))
#Calculamos los votos históricos por partido
totales_partido <-
resumen |>
group_by(siglas) |>
summarise(votos_totales = sum(votos, na.rm = TRUE))
#Participación relativa por partido y año
participacion_partido <-
resumen |>
group_by(fecha, siglas) |>
summarise(votos_partido = sum(votos, na.rm = TRUE), .groups = "drop") |>
left_join(participacion_anual, by = "fecha") |>
left_join(totales_partido, by = "siglas") |>
mutate(participacion_relativa = votos_partido / participacion_total)
#en esta tabla tenemos votos_partido que son los votos de ese partido en esa elección
#participación_total es el total de votos de la elección de ese año, todos los votantes
#votos_totales son el total de votos que ha conseguido cada partido en todas las elecciones, suma todos los votos que ha tenido a lo largo de los años
#participación_relativa es el total de votos del partido ese año entre el total de votos habidos en esas elecciones
#Analizamos el beneficio por tipo de participación
comparacion <-
participacion_partido |>
filter(categoria_participacion %in% c("Baja_participacion", "Alta_participacion")) |>
group_by(siglas,
categoria_participacion) |>
summarise(promedio_participacion = mean(participacion_relativa, na.rm = TRUE), .groups = "drop") |>
pivot_wider(names_from = categoria_participacion,
values_from = promedio_participacion) |>
mutate(beneficio_baja = Baja_participacion - Alta_participacion) |>
arrange(desc(beneficio_baja))
# Con el beneficio_baja sacamos la diferencia de porcentaje de votos de cada partido que han tenido los años de elecciones con naja participación entre los años de alta participación
# Los partidos donde beneficio_baja es positivo, significa que salen ganando cuando hay baja participación
#Los partidos con beneficio_baja negativo, significa que pierden votos cuando la participación es alta en las elecciones# A tibble: 12 × 4
siglas Alta_participacion Baja_participacion beneficio_baja
<chr> <dbl> <dbl> <dbl>
1 PP 0.287 0.331 0.0440
2 VOX 0.0529 0.0773 0.0244
3 OTROS 0.0520 0.0662 0.0141
4 MP 0.000159 0.00538 0.00522
5 EH-BILDU 0.00732 0.0111 0.00378
6 CIU 0.0281 0.0313 0.00323
7 PNV 0.0132 0.0138 0.000645
8 BNG 0.00494 0.00485 -0.0000821
9 ERC 0.0250 0.0245 -0.000508
10 Cs 0.101 0.100 -0.000704
11 UP 0.138 0.137 -0.00164
12 PSOE 0.318 0.268 -0.0500
# ANALIZANDO RELACIÓN ENTRE CENSO Y VOTO
# Calculamos el total de votos por municipio y por fecha electoral
relacion_censo_votos <-
resumen |>
group_by(fecha, id_municipio, censo) |>
summarise(Total_votos = sum(votos), .groups = "drop")
# Calcular la correlación entre censo y votos totales
correlacion_1 <-
cor(relacion_censo_votos$censo, relacion_censo_votos$Total_votos)
print(paste("Correlación entre censo y votos totales:",
round(correlacion_1, 2)))[1] "Correlación entre censo y votos totales: 1"
# Visualizar la correlación
ggplot(relacion_censo_votos,
aes(x = censo, y = Total_votos)) +
geom_point(alpha = 0.7, color = "#F4A460", size = 1.3) +
geom_smooth(method = "lm",
color = "#5F4B8B",
linewidth = 1,
se = FALSE) +
labs(
title = "Relación entre censo y votos totales",
subtitle = paste("Correlación:", round(correlacion_1, 2)),
x = "Censo (personas censadas)",
y = "Votos totales"
) +
theme_minimal(base_family = "Rockwell")+
theme(plot.title = element_text(size = 18,face = "bold", hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))# ANALIZANDO SI CIERTOS PARTIDOS GANAN MÁS EN ZONAS RURALES QUE EN ZONAS URBANAS
# Creamos una tabla en donde guardamos el tipo de zona según el censo: Rural o Urbano
rurales_urbanas <-
resumen |>
mutate("Zona" = ifelse(censo < 10000,
"Rural",
"Urbano"))
# Calculamos los votos de cada partido para cada tipo de zona en cada elección
votos_por_zona <-
rurales_urbanas |>
group_by(fecha, Zona, siglas) |>
summarise(Total_votos = sum(votos),
.groups = "drop")
# Creamos el gráfico que muestre las diferencias entre partidos, tipos de zona y fechas de elecciones
ggplot(votos_por_zona,
aes(x = siglas, y = Total_votos, fill = Zona)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.5)) +
facet_wrap(~ fecha, ncol = 2) + # Dividir gráficos por fecha de elección
scale_fill_manual(values = c("Rural" = "#D2B48C", "Urbano" = "#8B0000"))+
labs(
title = "Comparación de votos por partido entre zonas rurales y urbanas",
x = "Siglas",
y = "Total de Votos",
fill = "Zona") +
theme_minimal(base_family = "Rockwell") +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(size = 18,face = "bold", hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5) )# Como era de esperar, nos salen 6 gráficos (uno por cada fecha electoral) pero el problema es que puede ser bastante complicado de entender a la hora de exponerlo. Es por ello que creo conveniente poner 3 gráficos pero por separados que muestren cómo ha ido evolucionando los votos a lo largo del tiempo, por ejemplo el gráfico del 2008, el del 2016 y el del 2019
# GRÁFICOS 2008, 2016 Y 2019
# 2008
votos_por_zona_2008 <-
rurales_urbanas |>
filter(fecha == "2008-03-01") |>
group_by(Zona, siglas) |>
summarise(Total_votos = sum(votos), .groups = "drop")
zona_2008 <-
ggplot(votos_por_zona_2008, aes(x = siglas, y = Total_votos, fill = Zona)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.5)) +
scale_fill_manual(values = c("Rural" = "#D2B48C", "Urbano" = "#8B0000")) +
labs(
title = "Comparación de votos por partido entre zonas rurales y urbanas",
subtitle = "Fecha: Marzo de 2008",
x = "Siglas",
y = "Total de Votos",
fill = "Zona"
) +
theme_minimal(base_family = "Rockwell") +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(size = 18,face = "bold", hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))
# 2016
votos_por_zona_2016 <-
rurales_urbanas |>
filter(fecha == "2016-06-01") |>
group_by(Zona, siglas) |>
summarise(Total_votos = sum(votos), .groups = "drop")
zona_2016 <-
ggplot(votos_por_zona_2016, aes(x = siglas, y = Total_votos, fill = Zona)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.5)) +
scale_fill_manual(values = c("Rural" = "#D2B48C", "Urbano" = "#8B0000")) +
labs(
title = "Comparación de votos por partido entre zonas rurales y urbanas",
subtitle = "Fecha: Junio de 2016",
x = "Siglas",
y = "Total de Votos",
fill = "Zona"
) +
theme_minimal(base_family = "Rockwell") +
theme(axis.text.x = element_text(angle = 45,
hjust = 1),
plot.title = element_text(size = 18,face = "bold", hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))
# 2019 (la última)
votos_por_zona_2019 <-
rurales_urbanas |>
filter(fecha == "2019-11-01") |>
group_by(Zona, siglas) |>
summarise(Total_votos = sum(votos),
.groups = "drop")
zona_2019 <-
ggplot(votos_por_zona_2019, aes(x = siglas,
y = Total_votos,
fill = Zona)) +
geom_bar(stat = "identity", position = position_dodge(width = 0.5)) +
scale_fill_manual(values = c("Rural" = "#D2B48C", "Urbano" = "#8B0000")) +
labs(
title = "Comparación de votos por partido entre zonas rurales y urbanas",
subtitle = "Fecha: Noviembre de 2019",
x = "Siglas",
y = "Total de Votos",
fill = "Zona"
) +
theme_minimal(base_family = "Rockwell") +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(size = 18,face = "bold", hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))#dar el mismo formato de resumen a surveys
surveys_2 <-
surveys |>
pivot_longer(cols = "UCD":"EV", names_to = "partidos", values_to = "porcentaje", values_drop_na = TRUE )
# agrupar los partidos
surveys_2 <-
surveys_2 |>
mutate(partidos = case_when(
str_detect(partidos, "UP|IU|PODEMOS|COMPROMIS") ~ "UP",
str_detect(partidos, "PP") ~ "PP",
str_detect(partidos, "PNV") ~ "PNV",
str_detect(partidos, "PSOE") ~ "PSOE",
str_detect(partidos, "MP") ~ "MP",
str_detect(partidos, "VOX") ~ "VOX",
str_detect(partidos, "EH-BILDU|AMAIUR") ~ "EH-BILDU",
str_detect(partidos, "ERC") ~ "ERC",
str_detect(partidos, "BNG") ~ "BNG",
str_detect(partidos, "CS") ~ "Cs",
str_detect(partidos, "CIU|CDC") ~ "CIU",
TRUE ~ "OTROS"
))
#el valor porcentaje_estimado que aparece en cada pollster para cada eleccion y partido es la media ya que alexandra y yo hemos pensado que para compararlo con los resultados reales lo más conveniente es tener un único dato por casa, partido y elección, ya que es como aparece en los resultados reales
casas_encuestadoras <-
surveys_2 |>
select(c(date_elec,id_pollster,pollster,partidos,porcentaje)) |> #seleccionamos solo las columnas necesarias
mutate(date_elec = format(as.Date(date_elec), "%Y-%m")) |> #quitamos el día para después no tener problemas en la comparación
group_by(date_elec, id_pollster, partidos) |>
mutate(porcentaje_estimado = mean(porcentaje, na.rm = TRUE)) |>
distinct(date_elec, id_pollster, partidos, .keep_all = TRUE) |> #eliminar filas repetidas
select(-porcentaje) # ya no nos sirve
# suma de los votos a nivel nacional por eleccion y partido, se convierte este dato en porcentaje para poder compararlo con los datos de surveys
resultados <-
resumen |>
mutate(fecha = format(as.Date(fecha), "%Y-%m")) |>
group_by(fecha, siglas) |>
summarise(Votos_Totales = sum(votos), .groups = "drop") |>
group_by(fecha) |>
mutate(Porcentaje_real = Votos_Totales / sum(Votos_Totales) * 100) |>
select(fecha, siglas, Porcentaje_real)
comparacion <-
casas_encuestadoras |>
left_join(resultados,
by = c("date_elec" = "fecha", "partidos" = "siglas")) |> #unir por fecha y partido
mutate(error = Porcentaje_real - porcentaje_estimado) |>
select(date_elec, id_pollster,
pollster, partidos, Porcentaje_real,
porcentaje_estimado, error)
casas_encuestadoras <-
casas_encuestadoras |>
rename(fecha = date_elec)
grafico_combinado <-
ggplot() +
geom_bar(data = resultados,
aes(x = siglas, y = Porcentaje_real, fill = siglas),
stat = "identity", position = "dodge",alpha = 0.7) + # gráfico de barras con el porcentaje real de votos por partido y elección
geom_jitter(data = casas_encuestadoras,
aes(x = partidos, y = porcentaje_estimado, fill = partidos),
shape = 21, size = 0.5, stroke = 0.1,
color = "white",
position = position_jitter(width = 0.1, height = 0)) + # grafico de puntos con porceentajes estimados de cada casa por partido y elección
labs(title = "Porcentaje de votos reales y estimaciones por partido",
x = NULL,
y = "Porcentaje",
fill = "Partidos") +
scale_fill_manual(values = colores) +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
legend.position = "none") +
facet_wrap(~fecha) +
theme_minimal(base_family = "Rockwell") +
theme(plot.title = element_text(size = 18,face = "bold", hjust = 0.5),
axis.text.x = element_text(angle = 45, hjust = 1),
panel.grid.minor = element_blank())Sugerencia: Añadir un gráfico interactivo como este donde los puntos son las previsiones de las casas encuestadoreas y las barras los resultados reales
# Paso 1: Calcular el error absoluto para cada encuesta
datos_combinados <-
casas_encuestadoras |>
rename(siglas = partidos) |>
inner_join(resultados, by = c("fecha", "siglas")) |>
mutate(error_absoluto = abs(porcentaje_estimado - Porcentaje_real))
# Paso 2: Calcular el error promedio por casa encuestadora
error_por_casa <-
datos_combinados |>
group_by(pollster) |>
summarise(error_medio = mean(error_absoluto, na.rm = TRUE)) |>
arrange(error_medio)
# Paso 3: Identificar la casa encuestadora más precisa y la que más se desvió
casa_mas_precisa <-
error_por_casa |> slice_min(error_medio)
casa_mas_desviada <-
error_por_casa |> slice_max(error_medio)
# Visualización de resultados
list(Error_Promedio_Por_Casa = error_por_casa, Casa_Mas_Precisa = casa_mas_precisa,Casa_Mas_Desviada = casa_mas_desviada)$Error_Promedio_Por_Casa
# A tibble: 45 × 2
pollster error_medio
<chr> <dbl>
1 VOX PÚBLICA 0.911
2 OPINA 0.973
3 GALLUP 1.22
4 ADVICE STRATEGIC 1.35
5 APPEND 1.56
6 METRA SEIS 1.59
7 CEMOP 1.64
8 OBRADOIRO DE SOCIOLOXÍA 1.70
9 NOXA 1.73
10 ESTUDIO DE SOCIOLOGÍA CONSULTORES 1.83
# ℹ 35 more rows
$Casa_Mas_Precisa
# A tibble: 1 × 2
pollster error_medio
<chr> <dbl>
1 VOX PÚBLICA 0.911
$Casa_Mas_Desviada
# A tibble: 1 × 2
pollster error_medio
<chr> <dbl>
1 ASEP 5.23
# Filtrar solo las elecciones que ocurrieron en 2019
eleccion_2019 <-
resumen |>
filter(year(fecha) == 2019)
# Calculamos la participación total por elección, observamos que en la realizada en abril hay cerca de 2 millones más de votantes que en la de finales del mismo año
participacion_2019 <-
eleccion_2019 |>
group_by(fecha) |>
summarise(participacion_total = sum(votos, na.rm = TRUE)) |>
arrange(fecha)
print(participacion_2019)# A tibble: 2 × 2
fecha participacion_total
<date> <dbl>
1 2019-04-01 25877751
2 2019-11-01 23862002
# Comparamos los votos de cada partido en las dos elecciones de 2019
votos_2019 <-
eleccion_2019 |>
group_by(fecha, siglas) |>
summarise(votos_totales = sum(votos, na.rm = TRUE), .groups = "drop") |>
pivot_wider(names_from = fecha, values_from = votos_totales) |>
mutate(diferencia_votos = `2019-11-01` - `2019-04-01`) |>
arrange(desc(diferencia_votos))
#Esto nos devuelve una tabla con los votos de cada grupo de siglas, una columna con la primera elección y otra con la segunda. al final tenemos una tercera columna con la diferencia de votos entre elecciones, los positivos son los partidos que ganaron votos y los negativos los que perdieron electores
print(votos_2019) # A tibble: 11 × 4
siglas `2019-04-01` `2019-11-01` diferencia_votos
<chr> <dbl> <dbl> <dbl>
1 VOX 2676822 3640377 963555
2 PP 4356714 5021622 664908
3 MP 4204 376946 372742
4 BNG 93813 119597 25784
5 EH-BILDU 258848 276535 17687
6 PNV 394681 377502 -17179
7 OTROS 1554106 1517787 -36319
8 ERC 1015592 869786 -145806
9 UP 3904519 3272195 -632324
10 PSOE 7481667 6752314 -729353
11 Cs 4136785 1637341 -2499444
#Ahora unos gráficos para observar visualmente las diferencias entre sufragios
max_part <-
max(participacion_2019$participacion_total,
na.rm = TRUE)
ggplot(participacion_2019,
aes(x = as.factor(fecha),
y = participacion_total,
fill = as.factor(fecha))) +
geom_bar(stat = "identity",
show.legend = FALSE,
width = 0.6,
alpha = 0.9) +
scale_fill_manual(values = c("#D72638", "#6A4C93")) +
labs(
title = "Participación total en las elecciones de 2019",
subtitle = "Comparación entre fechas de elecciones",
x = "Fecha de Elección",
y = "Total de Votantes (en millones)"
) +
theme_minimal(base_family = "Rockwell")+
scale_y_continuous(breaks = seq(0, max_part, by = 2e6),
labels = scales::label_number(scale = 1e-6, suffix = "M"))+
theme(plot.title = element_text(size = 18,face = "bold", hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))# Gráfico de diferencias de votos por partido
max_dif <-
max(abs(votos_2019$diferencia_votos),
na.rm = TRUE)
ggplot(votos_2019,
aes(x = reorder(siglas, diferencia_votos),
y = diferencia_votos,
fill = diferencia_votos > 0)) +
geom_bar(stat = "identity",
show.legend = FALSE) +
labs(title = "Diferencia de votos por partido entre abril y noviembre de 2019",
x = "Partido",
y = "Diferencia de Votos") +
theme_minimal(base_family = "Rockwell") +
scale_fill_manual(values = c("#E57373", "#81C784")) + # Rojo para pérdidas, verde para ganancias
scale_y_continuous(
breaks = seq(-max_dif, max_dif, by = 500000), # Intervalos de 2M
labels = scales::label_number(scale = 1e-6, suffix = "M") # Convertir a millones
) +
coord_flip() +# Para que el gráfico sea horizontal
theme(plot.title = element_text(size = 18,face = "bold", hjust = 0.5))#Gráfico superpuesto con los votos en columnas de cada partido
votos_2019_long_temp <-
votos_2019 |>
pivot_longer(cols = -c(siglas, diferencia_votos), # Mantener siglas y diferencia_votos, convertir las fechas
names_to = "fecha",
values_to = "votos_totales")
votos_2019_long <-
votos_2019_long_temp |>
group_by(siglas) |>
summarise(total_votos = sum(votos_totales,
na.rm = TRUE)) |>
right_join(votos_2019_long_temp, by = "siglas") |>
mutate(siglas = fct_reorder(siglas,
total_votos,
.desc = TRUE))
ggplot(votos_2019_long,
aes(x = siglas,
y = votos_totales,
fill = as.factor(fecha))) +
geom_col(position = "identity", alpha = 0.8) + # Superponer barras con transparencia
labs(title = "Comparación de votos por partido en las elecciones de 2019",
x = "Partido",
y = "Total de Votos",
fill = "Fecha de elección") +
theme_minimal(base_family = "Rockwell") +
scale_fill_manual(values = c("#D72638", "#6A4C93")) + # Azul para abril, naranja para noviembre
scale_y_continuous(
labels = scales::label_number(scale = 1e-6, suffix = "M") # Convertir a millones
) +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
plot.title = element_text(size = 18,face = "bold", hjust = 0.5))Elaborar mapas de España con ganadores y participacion por provincia y ccaa
totales_election_data <-
election_data |>
# Extraer los primeros cuatro dígitos y crear una nueva columna de codigo de provincia
mutate(provincia = substr(id_municipio, 1, 4)) |>
group_by(provincia, fecha) |>
summarise(
total_votos = sum(votos, na.rm = TRUE),
# Sumar el total de votos
censo = mean(censo, na.rm = TRUE),
# Calcular el promedio del censo
participacion = total_votos / censo,
# Calcular la participación
.groups = "drop"
# Eliminar los grupos
)ganadores_todos <-
resumen |>
# Extraer los primeros cuatro dígitos y crear una nueva columna de codigo de provincia
mutate(provincia = substr(id_municipio, 1, 4)) |>
group_by(fecha, provincia) |>
summarise(
partido_ganador = siglas[which.max(votos)],
# Encontrar el partido con más votos
max_votos = max(votos),
# Encontrar el número máximo de votos
total_votos = sum(votos),
# Calcular el total de votos
.groups = "drop"
)# Combinar datos de totales y ganadores
ganadores_por_anno <-
totales_election_data |>
inner_join(ganadores_todos, by = c("provincia", "fecha")) |>
# Dividir la columna cpro en codauto (primeros 2 dígitos) y cpro (últimos 2 dígitos)
mutate(codauto = substr(provincia, 1, 2),
cpro = substr(provincia, 3, 4))# Obtener el mapa de provincias
data_provincias <-
esp_get_prov()
# Unir los datos de ganadores y participación al mapa
mapa_datos <-
data_provincias |>
left_join(ganadores_por_anno, by = "cpro")
map_ganador <-
ggplot(mapa_datos) +
geom_sf(aes(fill = partido_ganador,
alpha = participacion),
color = "white",
size = 0.2) +
scale_fill_manual(values = colores, name = "Partido Ganador")+
facet_wrap(~fecha)+
labs(
title = "Ganadores y Participación por Provincia en España",
subtitle = "Alpha representa la participación"
) +
guides(alpha = "none") +
theme_minimal(base_family = "Rockwell")+
theme(plot.title = element_text(size = 18,face = "bold", hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5))# DETERMINAMOS CUÁNTOS ESCAÑOS LE CORRESPONDEN A CADA PROVINCIA
# Escribimos todas las provincias de España (52)
provincias <-
c(
"Álava", "Albacete", "Alicante", "Almería", "Asturias", "Ávila",
"Badajoz", "Barcelona", "Burgos", "Cáceres", "Cádiz", "Cantabria",
"Castellón", "Ciudad Real", "Córdoba", "La Coruña", "Cuenca",
"Gerona", "Granada", "Guadalajara", "Guipúzcoa", "Huelva", "Huesca",
"Islas Baleares", "Jaén", "León", "Lérida", "Lugo", "Madrid", "Málaga",
"Murcia", "Navarra", "Orense", "Palencia", "Las Palmas", "Pontevedra",
"La Rioja", "Salamanca", "Segovia", "Sevilla", "Soria", "Tarragona",
"Santa Cruz de Tenerife", "Teruel", "Toledo", "Valencia", "Valladolid",
"Vizcaya", "Zamora", "Zaragoza", "Ceuta", "Melilla"
)
# Sacamos el código de provincia de la variable "id_municipio" y a cada código le asignamos el nombre de su provincia. (Los códigos son obtenidos desde el INE)
resumen_provincias <-
resumen |>
mutate(id_provincia = substr(id_municipio, 3, 4)) |>
relocate(id_provincia, .after = id_municipio) |>
mutate(provincia = case_when(
id_provincia == "01" ~ "Álaba",
id_provincia == "02" ~ "Albacete",
id_provincia == "03" ~ "Alicante",
id_provincia == "04" ~ "Almería",
id_provincia == "05" ~ "Ávila",
id_provincia == "06" ~ "Badajoz",
id_provincia == "07" ~ "Belears, Illes",
id_provincia == "08" ~ "Barcelona",
id_provincia == "09" ~ "Burgos",
id_provincia == "10" ~ "Cáceres",
id_provincia == "11" ~ "Cádiz",
id_provincia == "12" ~ "Castellón",
id_provincia == "13" ~ "Ciudad Real",
id_provincia == "14" ~ "Córdoba",
id_provincia == "15" ~ "Coruña, A",
id_provincia == "16" ~ "Cuenca",
id_provincia == "17" ~ "Girona",
id_provincia == "18" ~ "Granada",
id_provincia == "19" ~ "Guadalajara",
id_provincia == "20" ~ "Gipuzkoa",
id_provincia == "21" ~ "Huelva",
id_provincia == "22" ~ "Huesca",
id_provincia == "23" ~ "Jaén",
id_provincia == "24" ~ "León",
id_provincia == "25" ~ "Lleida",
id_provincia == "26" ~ "Rioja, La",
id_provincia == "27" ~ "Lugo",
id_provincia == "28" ~ "Madrid",
id_provincia == "29" ~ "Málaga",
id_provincia == "30" ~ "Murcia",
id_provincia == "31" ~ "Navarra",
id_provincia == "32" ~ "Ourense",
id_provincia == "33" ~ "Asturias",
id_provincia == "34" ~ "Palencia",
id_provincia == "35" ~ "Palmas, Las",
id_provincia == "36" ~ "Pontevedra",
id_provincia == "37" ~ "Salamanca",
id_provincia == "38" ~ "Santa Cruz De Tenerife",
id_provincia == "39" ~ "Cantabria",
id_provincia == "40" ~ "Segovia",
id_provincia == "41" ~ "Sevilla",
id_provincia == "42" ~ "Soria",
id_provincia == "43" ~ "Tarragona",
id_provincia == "44" ~ "Teruel",
id_provincia == "45" ~ "Toledo",
id_provincia == "46" ~ "Valencia/València",
id_provincia == "47" ~ "Valladolid",
id_provincia == "48" ~ "Bizkaia",
id_provincia == "49" ~ "Zamora",
id_provincia == "50" ~ "Zaragoza",
id_provincia == "51" ~ "Ceuta",
id_provincia == "52" ~ "Melilla"
)) |>
relocate(provincia, .after = id_provincia)
# Vamos a calcular cuántos escaños debe tener cada provincia. Esto es un simple cálculo el cual consiste en dividir el número de personas votantes que viven en cada provincia ("censo" por provincia) entre el número de personas votantes en España ("censo" del país). Ese número hay que multiplicarlo por 248 debido a que el número máximo de escaños son 350 y cada provincia de las 52 que hay debe tener mínimo 2 escaños (excepto Ceuta y Melilla que en vez de 2 escaños es 1 escaño). Entonces serían 350 - 50*2 -2*1 = 248
# Redondeamos el número que nos salga para tener los escaños en números naturales
Escaños_provincia <-
resumen_provincias |>
group_by(fecha, provincia) |>
summarise(Provincia_pob = sum(unique(censo)),
.groups = "drop") |>
mutate(Total_pob = sum(Provincia_pob),
n_escaños = (Provincia_pob/Total_pob)*248,
n_escaños = round(n_escaños),
.by = fecha) |>
mutate(n_escaños = case_when(
provincia == "Ceuta" ~ n_escaños + 1,
provincia == "Melilla" ~ n_escaños + 1,
TRUE ~ n_escaños + 2
))
# Para que un partido tenga la opción de poder obtener un escaño en una provincia, los votos de ese partido en esa provincia deben de ser superiores al 5% de los votos válidos (votos + votos en blanco) de esa provincia.
# En esta tabla se enseña el umbral de votos mínimo para cada fecha en cada provincia
Umbral_minimo <-
resumen_provincias |>
group_by(fecha, provincia) |>
summarise(Votos_validos =
sum(unique(votos_candidaturas))
+ sum(unique(votos_blancos))) |>
mutate(minimo_votos = Votos_validos * 0.05,
minimo_votos = round(minimo_votos)) |>
ungroup()
# En esta tabla se muestran los votos de cada partido en cada provincia para cada fecha
Votos_partido <-
resumen_provincias |>
group_by(fecha, provincia, siglas) |>
summarise(votos = sum(votos),
.groups = "drop")
# Unimos estas últimas dos tablas y añadimos un filtro, lo que nos da con los partidos con derecho a escaños en cada provincia. (Los partidos con derecho a escaños serán entonces los que superen el mínimo de votos de cada provincia)
Partidos_con_derecho_escaños <-
Umbral_minimo |>
inner_join(Votos_partido)|>
group_by(fecha, siglas, provincia) |>
filter(votos >= unique(minimo_votos))
# Para finalizar, tenemos que unir la primera tabla (Escaños_provincia) con la última (Partidos_con_derecho_escaños) para tener, en una misma tabla, los datos que nos interesan: Nº de escaños de cada provincia, nombre de la provincia, votos de los partidos de cada provincia, la fecha y las siglas de cada partido
Escaños_provincia_2 <-
Escaños_provincia |>
left_join(Partidos_con_derecho_escaños) |>
select(fecha, provincia, n_escaños, siglas, votos)# CALCULAMOS EL REPARTO DE ESCAÑOS PARA CADA PROVINCIA CON LA LEY D'HONT
# Obtener todas las provincias y fechas únicas de la tabla "Escaños_provincia_2"
provincias <-
unique(Escaños_provincia_2$provincia)
fechas <-
unique(Escaños_provincia_2$fecha)
# Función de Ley D'Hondt
dhont <- function(votos, n_escaños) {
divisores <- 1:n_escaños
tabla <- data.frame(
Partido = rep(names(votos), each = n_escaños),
Cociente = unlist(lapply(votos, function(v) v / divisores))
)
tabla <- tabla[order(-tabla$Cociente), ]
tabla <- head(tabla, n_escaños)
resultados <- as.data.frame(table(tabla$Partido))
colnames(resultados) <- c("Partido", "Escaños")
return(resultados)
}
# Función para calcular cuántos escaños obtiene cada partido por fecha y provincia
calcular_escaños <- function(fecha, provincia, data) {
# Filtrar datos para la fecha y provincia
datos_filtrados <- data |>
filter(fecha == !!fecha, provincia == !!provincia)
if (nrow(datos_filtrados) == 0) {
return(NULL) # Retornar NULL si no hay datos para esta combinación
}
# Vector de votos y número de escaños
votos <- setNames(datos_filtrados$votos, datos_filtrados$siglas)
n_escaños <- unique(datos_filtrados$n_escaños)
if (length(n_escaños) != 1) {
stop(paste("Número de escaños inconsistente para la fecha", fecha, "y provincia", provincia))
}
# Aplicar la Ley D'Hondt
resultados <- dhont(votos, n_escaños)
resultados$Fecha <- fecha
resultados$Provincia <- provincia
return(resultados)
}
# Aplicar la función a todas las provincias y fechas
resultados_todos <-
expand.grid(fechas, provincias) |>
rename(Fecha = Var1, Provincia = Var2) |>
pmap_dfr(~ calcular_escaños(..1, ..2, Escaños_provincia_2)) |>
relocate(Fecha, .before = everything()) |>
relocate(Provincia, .after = Fecha)
# Ver los resultados
resultados_todos Fecha Provincia Partido Escaños
1 2008-03-01 Albacete PP 2
2 2008-03-01 Albacete PSOE 2
3 2011-11-01 Albacete PP 3
4 2011-11-01 Albacete PSOE 1
5 2015-12-01 Albacete PP 2
6 2015-12-01 Albacete PSOE 1
7 2015-12-01 Albacete UP 1
8 2016-06-01 Albacete PP 2
9 2016-06-01 Albacete PSOE 1
10 2016-06-01 Albacete UP 1
11 2019-04-01 Albacete Cs 1
12 2019-04-01 Albacete PP 1
13 2019-04-01 Albacete PSOE 2
14 2019-11-01 Albacete PP 1
15 2019-11-01 Albacete PSOE 2
16 2019-11-01 Albacete VOX 1
17 2008-03-01 Alicante PP 6
18 2008-03-01 Alicante PSOE 5
19 2011-11-01 Alicante PP 7
20 2011-11-01 Alicante PSOE 3
21 2011-11-01 Alicante UP 1
22 2015-12-01 Alicante Cs 2
23 2015-12-01 Alicante PP 4
24 2015-12-01 Alicante PSOE 2
25 2015-12-01 Alicante UP 3
26 2016-06-01 Alicante Cs 2
27 2016-06-01 Alicante PP 5
28 2016-06-01 Alicante PSOE 2
29 2016-06-01 Alicante UP 2
30 2019-04-01 Alicante Cs 2
31 2019-04-01 Alicante PP 2
32 2019-04-01 Alicante PSOE 4
33 2019-04-01 Alicante UP 2
34 2019-04-01 Alicante VOX 1
35 2019-11-01 Alicante Cs 1
36 2019-11-01 Alicante PP 3
37 2019-11-01 Alicante PSOE 3
38 2019-11-01 Alicante UP 2
39 2019-11-01 Alicante VOX 2
40 2008-03-01 Almería PP 3
41 2008-03-01 Almería PSOE 2
42 2011-11-01 Almería PP 3
43 2011-11-01 Almería PSOE 2
44 2015-12-01 Almería PP 2
45 2015-12-01 Almería PSOE 2
46 2015-12-01 Almería UP 1
47 2016-06-01 Almería PP 3
48 2016-06-01 Almería PSOE 2
49 2019-04-01 Almería Cs 1
50 2019-04-01 Almería PP 1
51 2019-04-01 Almería PSOE 2
52 2019-04-01 Almería VOX 1
53 2019-11-01 Almería PP 1
54 2019-11-01 Almería PSOE 2
55 2019-11-01 Almería VOX 2
56 2008-03-01 Asturias PP 4
57 2008-03-01 Asturias PSOE 5
58 2011-11-01 Asturias OTROS 2
59 2011-11-01 Asturias PP 3
60 2011-11-01 Asturias PSOE 3
61 2011-11-01 Asturias UP 1
62 2015-12-01 Asturias Cs 1
63 2015-12-01 Asturias PP 3
64 2015-12-01 Asturias PSOE 2
65 2015-12-01 Asturias UP 2
66 2016-06-01 Asturias Cs 1
67 2016-06-01 Asturias PP 3
68 2016-06-01 Asturias PSOE 2
69 2016-06-01 Asturias UP 2
70 2019-04-01 Asturias Cs 1
71 2019-04-01 Asturias PP 2
72 2019-04-01 Asturias PSOE 3
73 2019-04-01 Asturias UP 1
74 2019-04-01 Asturias VOX 1
75 2019-11-01 Asturias PP 2
76 2019-11-01 Asturias PSOE 4
77 2019-11-01 Asturias UP 1
78 2019-11-01 Asturias VOX 1
79 2008-03-01 Badajoz PP 3
80 2008-03-01 Badajoz PSOE 3
81 2011-11-01 Badajoz PP 4
82 2011-11-01 Badajoz PSOE 2
83 2015-12-01 Badajoz PP 2
84 2015-12-01 Badajoz PSOE 3
85 2015-12-01 Badajoz UP 1
86 2016-06-01 Badajoz PP 3
87 2016-06-01 Badajoz PSOE 2
88 2016-06-01 Badajoz UP 1
89 2019-04-01 Badajoz Cs 1
90 2019-04-01 Badajoz PP 1
91 2019-04-01 Badajoz PSOE 3
92 2019-04-01 Badajoz VOX 1
93 2019-11-01 Badajoz PP 2
94 2019-11-01 Badajoz PSOE 3
95 2019-11-01 Badajoz VOX 1
96 2008-03-01 Barcelona CIU 6
97 2008-03-01 Barcelona ERC 2
98 2008-03-01 Barcelona PP 6
99 2008-03-01 Barcelona PSOE 16
100 2008-03-01 Barcelona UP 1
101 2011-11-01 Barcelona CIU 8
102 2011-11-01 Barcelona ERC 2
103 2011-11-01 Barcelona OTROS 2
104 2011-11-01 Barcelona PP 6
105 2011-11-01 Barcelona PSOE 9
106 2011-11-01 Barcelona UP 3
107 2015-12-01 Barcelona CIU 5
108 2015-12-01 Barcelona Cs 4
109 2015-12-01 Barcelona ERC 5
110 2015-12-01 Barcelona PP 3
111 2015-12-01 Barcelona PSOE 5
112 2015-12-01 Barcelona UP 9
113 2016-06-01 Barcelona CIU 4
114 2016-06-01 Barcelona Cs 4
115 2016-06-01 Barcelona ERC 5
116 2016-06-01 Barcelona PP 4
117 2016-06-01 Barcelona PSOE 5
118 2016-06-01 Barcelona UP 9
119 2019-04-01 Barcelona Cs 4
120 2019-04-01 Barcelona ERC 8
121 2019-04-01 Barcelona OTROS 5
122 2019-04-01 Barcelona PP 1
123 2019-04-01 Barcelona PSOE 8
124 2019-04-01 Barcelona UP 5
125 2019-11-01 Barcelona Cs 2
126 2019-11-01 Barcelona ERC 7
127 2019-11-01 Barcelona OTROS 6
128 2019-11-01 Barcelona PP 2
129 2019-11-01 Barcelona PSOE 7
130 2019-11-01 Barcelona UP 5
131 2019-11-01 Barcelona VOX 2
132 2008-03-01 Belears, Illes PP 3
133 2008-03-01 Belears, Illes PSOE 4
134 2011-11-01 Belears, Illes PP 4
135 2011-11-01 Belears, Illes PSOE 2
136 2011-11-01 Belears, Illes UP 1
137 2015-12-01 Belears, Illes Cs 1
138 2015-12-01 Belears, Illes OTROS 1
139 2015-12-01 Belears, Illes PP 2
140 2015-12-01 Belears, Illes PSOE 1
141 2015-12-01 Belears, Illes UP 2
142 2016-06-01 Belears, Illes Cs 1
143 2016-06-01 Belears, Illes PP 3
144 2016-06-01 Belears, Illes PSOE 1
145 2016-06-01 Belears, Illes UP 2
146 2019-04-01 Belears, Illes Cs 1
147 2019-04-01 Belears, Illes OTROS 1
148 2019-04-01 Belears, Illes PP 1
149 2019-04-01 Belears, Illes PSOE 2
150 2019-04-01 Belears, Illes UP 2
151 2019-04-01 Belears, Illes VOX 1
152 2019-11-01 Belears, Illes PP 2
153 2019-11-01 Belears, Illes PSOE 2
154 2019-11-01 Belears, Illes UP 2
155 2019-11-01 Belears, Illes VOX 2
156 2008-03-01 Bizkaia PNV 3
157 2008-03-01 Bizkaia PP 2
158 2008-03-01 Bizkaia PSOE 4
159 2011-11-01 Bizkaia EH-BILDU 2
160 2011-11-01 Bizkaia PNV 3
161 2011-11-01 Bizkaia PP 2
162 2011-11-01 Bizkaia PSOE 2
163 2015-12-01 Bizkaia EH-BILDU 1
164 2015-12-01 Bizkaia PNV 3
165 2015-12-01 Bizkaia PP 1
166 2015-12-01 Bizkaia PSOE 1
167 2015-12-01 Bizkaia UP 3
168 2016-06-01 Bizkaia EH-BILDU 1
169 2016-06-01 Bizkaia PNV 3
170 2016-06-01 Bizkaia PP 1
171 2016-06-01 Bizkaia PSOE 1
172 2016-06-01 Bizkaia UP 3
173 2019-04-01 Bizkaia EH-BILDU 1
174 2019-04-01 Bizkaia PNV 4
175 2019-04-01 Bizkaia PSOE 2
176 2019-04-01 Bizkaia UP 2
177 2019-11-01 Bizkaia EH-BILDU 1
178 2019-11-01 Bizkaia PNV 4
179 2019-11-01 Bizkaia PP 1
180 2019-11-01 Bizkaia PSOE 2
181 2019-11-01 Bizkaia UP 1
182 2008-03-01 Burgos PP 2
183 2008-03-01 Burgos PSOE 2
184 2011-11-01 Burgos PP 3
185 2011-11-01 Burgos PSOE 1
186 2015-12-01 Burgos PP 2
187 2015-12-01 Burgos PSOE 1
188 2015-12-01 Burgos UP 1
189 2016-06-01 Burgos PP 2
190 2016-06-01 Burgos PSOE 1
191 2016-06-01 Burgos UP 1
192 2019-04-01 Burgos Cs 1
193 2019-04-01 Burgos PP 1
194 2019-04-01 Burgos PSOE 2
195 2019-11-01 Burgos PP 2
196 2019-11-01 Burgos PSOE 2
197 2008-03-01 Cantabria PP 3
198 2008-03-01 Cantabria PSOE 2
199 2011-11-01 Cantabria OTROS 1
200 2011-11-01 Cantabria PP 3
201 2011-11-01 Cantabria PSOE 1
202 2015-12-01 Cantabria Cs 1
203 2015-12-01 Cantabria PP 2
204 2015-12-01 Cantabria PSOE 1
205 2015-12-01 Cantabria UP 1
206 2016-06-01 Cantabria Cs 1
207 2016-06-01 Cantabria PP 2
208 2016-06-01 Cantabria PSOE 1
209 2016-06-01 Cantabria UP 1
210 2019-04-01 Cantabria Cs 1
211 2019-04-01 Cantabria OTROS 1
212 2019-04-01 Cantabria PP 1
213 2019-04-01 Cantabria PSOE 2
214 2019-11-01 Cantabria OTROS 1
215 2019-11-01 Cantabria PP 2
216 2019-11-01 Cantabria PSOE 1
217 2019-11-01 Cantabria VOX 1
218 2008-03-01 Castellón PP 3
219 2008-03-01 Castellón PSOE 2
220 2011-11-01 Castellón PP 3
221 2011-11-01 Castellón PSOE 2
222 2015-12-01 Castellón Cs 1
223 2015-12-01 Castellón PP 2
224 2015-12-01 Castellón PSOE 1
225 2015-12-01 Castellón UP 1
226 2016-06-01 Castellón Cs 1
227 2016-06-01 Castellón PP 2
228 2016-06-01 Castellón PSOE 1
229 2016-06-01 Castellón UP 1
230 2019-04-01 Castellón Cs 1
231 2019-04-01 Castellón PP 1
232 2019-04-01 Castellón PSOE 2
233 2019-04-01 Castellón UP 1
234 2019-11-01 Castellón PP 1
235 2019-11-01 Castellón PSOE 2
236 2019-11-01 Castellón UP 1
237 2019-11-01 Castellón VOX 1
238 2008-03-01 Ceuta PP 1
239 2011-11-01 Ceuta PP 1
240 2015-12-01 Ceuta PP 1
241 2016-06-01 Ceuta PP 1
242 2019-04-01 Ceuta PSOE 1
243 2019-11-01 Ceuta VOX 1
244 2008-03-01 Ciudad Real PP 3
245 2008-03-01 Ciudad Real PSOE 2
246 2011-11-01 Ciudad Real PP 3
247 2011-11-01 Ciudad Real PSOE 2
248 2015-12-01 Ciudad Real PP 2
249 2015-12-01 Ciudad Real PSOE 2
250 2015-12-01 Ciudad Real UP 1
251 2016-06-01 Ciudad Real PP 3
252 2016-06-01 Ciudad Real PSOE 2
253 2019-04-01 Ciudad Real Cs 1
254 2019-04-01 Ciudad Real PP 1
255 2019-04-01 Ciudad Real PSOE 2
256 2019-04-01 Ciudad Real VOX 1
257 2019-11-01 Ciudad Real PP 2
258 2019-11-01 Ciudad Real PSOE 2
259 2019-11-01 Ciudad Real VOX 1
260 2008-03-01 Coruña, A BNG 1
261 2008-03-01 Coruña, A PP 4
262 2008-03-01 Coruña, A PSOE 4
263 2011-11-01 Coruña, A BNG 1
264 2011-11-01 Coruña, A PP 5
265 2011-11-01 Coruña, A PSOE 3
266 2015-12-01 Coruña, A Cs 1
267 2015-12-01 Coruña, A OTROS 3
268 2015-12-01 Coruña, A PP 3
269 2015-12-01 Coruña, A PSOE 2
270 2016-06-01 Coruña, A Cs 1
271 2016-06-01 Coruña, A OTROS 2
272 2016-06-01 Coruña, A PP 4
273 2016-06-01 Coruña, A PSOE 2
274 2019-04-01 Coruña, A Cs 1
275 2019-04-01 Coruña, A PP 3
276 2019-04-01 Coruña, A PSOE 4
277 2019-04-01 Coruña, A UP 1
278 2019-11-01 Coruña, A BNG 1
279 2019-11-01 Coruña, A PP 3
280 2019-11-01 Coruña, A PSOE 3
281 2019-11-01 Coruña, A UP 1
282 2019-11-01 Coruña, A VOX 1
283 2008-03-01 Cuenca PP 2
284 2008-03-01 Cuenca PSOE 1
285 2011-11-01 Cuenca PP 2
286 2011-11-01 Cuenca PSOE 1
287 2015-12-01 Cuenca PP 2
288 2015-12-01 Cuenca PSOE 1
289 2016-06-01 Cuenca PP 2
290 2016-06-01 Cuenca PSOE 1
291 2019-04-01 Cuenca PP 1
292 2019-04-01 Cuenca PSOE 2
293 2019-11-01 Cuenca PP 1
294 2019-11-01 Cuenca PSOE 2
295 2008-03-01 Cáceres PP 2
296 2008-03-01 Cáceres PSOE 2
297 2011-11-01 Cáceres PP 2
298 2011-11-01 Cáceres PSOE 2
299 2015-12-01 Cáceres PP 2
300 2015-12-01 Cáceres PSOE 2
301 2016-06-01 Cáceres PP 2
302 2016-06-01 Cáceres PSOE 2
303 2019-04-01 Cáceres Cs 1
304 2019-04-01 Cáceres PP 1
305 2019-04-01 Cáceres PSOE 2
306 2019-11-01 Cáceres PP 1
307 2019-11-01 Cáceres PSOE 2
308 2019-11-01 Cáceres VOX 1
309 2008-03-01 Cádiz PP 4
310 2008-03-01 Cádiz PSOE 5
311 2011-11-01 Cádiz OTROS 1
312 2011-11-01 Cádiz PP 5
313 2011-11-01 Cádiz PSOE 3
314 2015-12-01 Cádiz Cs 1
315 2015-12-01 Cádiz PP 3
316 2015-12-01 Cádiz PSOE 3
317 2015-12-01 Cádiz UP 2
318 2016-06-01 Cádiz Cs 1
319 2016-06-01 Cádiz PP 3
320 2016-06-01 Cádiz PSOE 3
321 2016-06-01 Cádiz UP 2
322 2019-04-01 Cádiz Cs 2
323 2019-04-01 Cádiz PP 1
324 2019-04-01 Cádiz PSOE 3
325 2019-04-01 Cádiz UP 2
326 2019-04-01 Cádiz VOX 1
327 2019-11-01 Cádiz Cs 1
328 2019-11-01 Cádiz PP 2
329 2019-11-01 Cádiz PSOE 3
330 2019-11-01 Cádiz UP 1
331 2019-11-01 Cádiz VOX 2
332 2008-03-01 Córdoba PP 3
333 2008-03-01 Córdoba PSOE 4
334 2011-11-01 Córdoba PP 4
335 2011-11-01 Córdoba PSOE 3
336 2015-12-01 Córdoba Cs 1
337 2015-12-01 Córdoba PP 2
338 2015-12-01 Córdoba PSOE 2
339 2015-12-01 Córdoba UP 2
340 2016-06-01 Córdoba Cs 1
341 2016-06-01 Córdoba PP 3
342 2016-06-01 Córdoba PSOE 2
343 2016-06-01 Córdoba UP 1
344 2019-04-01 Córdoba Cs 1
345 2019-04-01 Córdoba PP 1
346 2019-04-01 Córdoba PSOE 3
347 2019-04-01 Córdoba UP 1
348 2019-04-01 Córdoba VOX 1
349 2019-11-01 Córdoba PP 2
350 2019-11-01 Córdoba PSOE 3
351 2019-11-01 Córdoba UP 1
352 2019-11-01 Córdoba VOX 1
353 2008-03-01 Gipuzkoa EH-BILDU 1
354 2008-03-01 Gipuzkoa PNV 1
355 2008-03-01 Gipuzkoa PP 1
356 2008-03-01 Gipuzkoa PSOE 3
357 2011-11-01 Gipuzkoa EH-BILDU 3
358 2011-11-01 Gipuzkoa PNV 1
359 2011-11-01 Gipuzkoa PP 1
360 2011-11-01 Gipuzkoa PSOE 1
361 2015-12-01 Gipuzkoa EH-BILDU 1
362 2015-12-01 Gipuzkoa PNV 2
363 2015-12-01 Gipuzkoa PSOE 1
364 2015-12-01 Gipuzkoa UP 2
365 2016-06-01 Gipuzkoa EH-BILDU 1
366 2016-06-01 Gipuzkoa PNV 2
367 2016-06-01 Gipuzkoa PSOE 1
368 2016-06-01 Gipuzkoa UP 2
369 2019-04-01 Gipuzkoa EH-BILDU 2
370 2019-04-01 Gipuzkoa PNV 2
371 2019-04-01 Gipuzkoa PSOE 1
372 2019-04-01 Gipuzkoa UP 1
373 2019-11-01 Gipuzkoa EH-BILDU 2
374 2019-11-01 Gipuzkoa PNV 2
375 2019-11-01 Gipuzkoa PSOE 1
376 2019-11-01 Gipuzkoa UP 1
377 2008-03-01 Girona CIU 2
378 2008-03-01 Girona ERC 1
379 2008-03-01 Girona PSOE 2
380 2011-11-01 Girona CIU 3
381 2011-11-01 Girona ERC 1
382 2011-11-01 Girona PP 1
383 2011-11-01 Girona PSOE 1
384 2015-12-01 Girona CIU 2
385 2015-12-01 Girona ERC 2
386 2015-12-01 Girona PSOE 1
387 2015-12-01 Girona UP 1
388 2016-06-01 Girona CIU 2
389 2016-06-01 Girona ERC 2
390 2016-06-01 Girona PSOE 1
391 2016-06-01 Girona UP 1
392 2019-04-01 Girona ERC 3
393 2019-04-01 Girona OTROS 2
394 2019-04-01 Girona PSOE 1
395 2019-11-01 Girona ERC 2
396 2019-11-01 Girona OTROS 3
397 2019-11-01 Girona PSOE 1
398 2008-03-01 Granada PP 3
399 2008-03-01 Granada PSOE 4
400 2011-11-01 Granada PP 4
401 2011-11-01 Granada PSOE 3
402 2015-12-01 Granada Cs 1
403 2015-12-01 Granada PP 2
404 2015-12-01 Granada PSOE 2
405 2015-12-01 Granada UP 2
406 2016-06-01 Granada Cs 1
407 2016-06-01 Granada PP 3
408 2016-06-01 Granada PSOE 2
409 2016-06-01 Granada UP 1
410 2019-04-01 Granada Cs 1
411 2019-04-01 Granada PP 1
412 2019-04-01 Granada PSOE 3
413 2019-04-01 Granada UP 1
414 2019-04-01 Granada VOX 1
415 2019-11-01 Granada PP 2
416 2019-11-01 Granada PSOE 3
417 2019-11-01 Granada UP 1
418 2019-11-01 Granada VOX 1
419 2008-03-01 Guadalajara PP 2
420 2008-03-01 Guadalajara PSOE 1
421 2011-11-01 Guadalajara PP 2
422 2011-11-01 Guadalajara PSOE 1
423 2015-12-01 Guadalajara PP 1
424 2015-12-01 Guadalajara PSOE 1
425 2015-12-01 Guadalajara UP 1
426 2016-06-01 Guadalajara PP 2
427 2016-06-01 Guadalajara PSOE 1
428 2019-04-01 Guadalajara Cs 1
429 2019-04-01 Guadalajara PP 1
430 2019-04-01 Guadalajara PSOE 1
431 2019-11-01 Guadalajara PP 1
432 2019-11-01 Guadalajara PSOE 1
433 2019-11-01 Guadalajara VOX 1
434 2008-03-01 Huelva PP 2
435 2008-03-01 Huelva PSOE 3
436 2011-11-01 Huelva PP 3
437 2011-11-01 Huelva PSOE 2
438 2015-12-01 Huelva PP 2
439 2015-12-01 Huelva PSOE 2
440 2015-12-01 Huelva UP 1
441 2016-06-01 Huelva PP 2
442 2016-06-01 Huelva PSOE 2
443 2016-06-01 Huelva UP 1
444 2019-04-01 Huelva Cs 1
445 2019-04-01 Huelva PP 1
446 2019-04-01 Huelva PSOE 2
447 2019-04-01 Huelva UP 1
448 2019-11-01 Huelva PP 1
449 2019-11-01 Huelva PSOE 3
450 2019-11-01 Huelva VOX 1
451 2008-03-01 Huesca PP 1
452 2008-03-01 Huesca PSOE 2
453 2011-11-01 Huesca PP 2
454 2011-11-01 Huesca PSOE 1
455 2015-12-01 Huesca PP 1
456 2015-12-01 Huesca PSOE 1
457 2015-12-01 Huesca UP 1
458 2016-06-01 Huesca PP 1
459 2016-06-01 Huesca PSOE 1
460 2016-06-01 Huesca UP 1
461 2019-04-01 Huesca Cs 1
462 2019-04-01 Huesca PP 1
463 2019-04-01 Huesca PSOE 1
464 2019-11-01 Huesca PP 1
465 2019-11-01 Huesca PSOE 2
466 2008-03-01 Jaén PP 2
467 2008-03-01 Jaén PSOE 4
468 2011-11-01 Jaén PP 3
469 2011-11-01 Jaén PSOE 3
470 2015-12-01 Jaén PP 2
471 2015-12-01 Jaén PSOE 3
472 2015-12-01 Jaén UP 1
473 2016-06-01 Jaén PP 2
474 2016-06-01 Jaén PSOE 3
475 2016-06-01 Jaén UP 1
476 2019-04-01 Jaén Cs 1
477 2019-04-01 Jaén PP 1
478 2019-04-01 Jaén PSOE 3
479 2019-04-01 Jaén VOX 1
480 2019-11-01 Jaén PP 2
481 2019-11-01 Jaén PSOE 3
482 2019-11-01 Jaén VOX 1
483 2008-03-01 León PP 2
484 2008-03-01 León PSOE 3
485 2011-11-01 León PP 3
486 2011-11-01 León PSOE 2
487 2015-12-01 León Cs 1
488 2015-12-01 León PP 2
489 2015-12-01 León PSOE 1
490 2015-12-01 León UP 1
491 2016-06-01 León PP 3
492 2016-06-01 León PSOE 1
493 2016-06-01 León UP 1
494 2019-04-01 León Cs 1
495 2019-04-01 León PP 1
496 2019-04-01 León PSOE 2
497 2019-04-01 León UP 1
498 2019-11-01 León PP 2
499 2019-11-01 León PSOE 2
500 2019-11-01 León VOX 1
501 2008-03-01 Lleida CIU 1
502 2008-03-01 Lleida PP 1
503 2008-03-01 Lleida PSOE 2
504 2011-11-01 Lleida CIU 2
505 2011-11-01 Lleida PP 1
506 2011-11-01 Lleida PSOE 1
507 2015-12-01 Lleida CIU 2
508 2015-12-01 Lleida ERC 1
509 2015-12-01 Lleida UP 1
510 2016-06-01 Lleida CIU 1
511 2016-06-01 Lleida ERC 1
512 2016-06-01 Lleida PP 1
513 2016-06-01 Lleida UP 1
514 2019-04-01 Lleida ERC 2
515 2019-04-01 Lleida OTROS 1
516 2019-04-01 Lleida PSOE 1
517 2019-11-01 Lleida ERC 2
518 2019-11-01 Lleida OTROS 2
519 2008-03-01 Lugo PP 2
520 2008-03-01 Lugo PSOE 2
521 2011-11-01 Lugo PP 3
522 2011-11-01 Lugo PSOE 1
523 2015-12-01 Lugo OTROS 1
524 2015-12-01 Lugo PP 2
525 2015-12-01 Lugo PSOE 1
526 2016-06-01 Lugo OTROS 1
527 2016-06-01 Lugo PP 2
528 2016-06-01 Lugo PSOE 1
529 2019-04-01 Lugo PP 2
530 2019-04-01 Lugo PSOE 2
531 2019-11-01 Lugo PP 2
532 2019-11-01 Lugo PSOE 2
533 2008-03-01 Madrid OTROS 2
534 2008-03-01 Madrid PP 18
535 2008-03-01 Madrid PSOE 14
536 2011-11-01 Madrid OTROS 5
537 2011-11-01 Madrid PP 18
538 2011-11-01 Madrid PSOE 9
539 2011-11-01 Madrid UP 2
540 2015-12-01 Madrid Cs 7
541 2015-12-01 Madrid PP 13
542 2015-12-01 Madrid PSOE 6
543 2015-12-01 Madrid UP 10
544 2016-06-01 Madrid Cs 6
545 2016-06-01 Madrid PP 15
546 2016-06-01 Madrid PSOE 7
547 2016-06-01 Madrid UP 8
548 2019-04-01 Madrid Cs 8
549 2019-04-01 Madrid PP 7
550 2019-04-01 Madrid PSOE 10
551 2019-04-01 Madrid UP 6
552 2019-04-01 Madrid VOX 5
553 2019-11-01 Madrid Cs 3
554 2019-11-01 Madrid MP 2
555 2019-11-01 Madrid PP 9
556 2019-11-01 Madrid PSOE 10
557 2019-11-01 Madrid UP 5
558 2019-11-01 Madrid VOX 7
559 2008-03-01 Melilla PP 1
560 2011-11-01 Melilla PP 1
561 2015-12-01 Melilla PP 1
562 2016-06-01 Melilla PP 1
563 2019-04-01 Melilla PP 1
564 2019-11-01 Melilla PP 1
565 2008-03-01 Murcia PP 6
566 2008-03-01 Murcia PSOE 3
567 2011-11-01 Murcia PP 7
568 2011-11-01 Murcia PSOE 2
569 2015-12-01 Murcia Cs 2
570 2015-12-01 Murcia PP 4
571 2015-12-01 Murcia PSOE 2
572 2015-12-01 Murcia UP 1
573 2016-06-01 Murcia Cs 1
574 2016-06-01 Murcia PP 5
575 2016-06-01 Murcia PSOE 2
576 2016-06-01 Murcia UP 1
577 2019-04-01 Murcia Cs 2
578 2019-04-01 Murcia PP 2
579 2019-04-01 Murcia PSOE 2
580 2019-04-01 Murcia UP 1
581 2019-04-01 Murcia VOX 2
582 2019-11-01 Murcia PP 3
583 2019-11-01 Murcia PSOE 2
584 2019-11-01 Murcia UP 1
585 2019-11-01 Murcia VOX 3
586 2008-03-01 Málaga PP 5
587 2008-03-01 Málaga PSOE 5
588 2011-11-01 Málaga OTROS 1
589 2011-11-01 Málaga PP 5
590 2011-11-01 Málaga PSOE 3
591 2011-11-01 Málaga UP 1
592 2015-12-01 Málaga Cs 2
593 2015-12-01 Málaga PP 3
594 2015-12-01 Málaga PSOE 3
595 2015-12-01 Málaga UP 2
596 2016-06-01 Málaga Cs 1
597 2016-06-01 Málaga PP 4
598 2016-06-01 Málaga PSOE 3
599 2016-06-01 Málaga UP 2
600 2019-04-01 Málaga Cs 2
601 2019-04-01 Málaga PP 2
602 2019-04-01 Málaga PSOE 4
603 2019-04-01 Málaga UP 1
604 2019-04-01 Málaga VOX 1
605 2019-11-01 Málaga Cs 1
606 2019-11-01 Málaga PP 2
607 2019-11-01 Málaga PSOE 4
608 2019-11-01 Málaga UP 1
609 2019-11-01 Málaga VOX 2
610 2008-03-01 Navarra OTROS 1
611 2008-03-01 Navarra PP 2
612 2008-03-01 Navarra PSOE 2
613 2011-11-01 Navarra EH-BILDU 1
614 2011-11-01 Navarra OTROS 1
615 2011-11-01 Navarra PP 2
616 2011-11-01 Navarra PSOE 1
617 2015-12-01 Navarra OTROS 2
618 2015-12-01 Navarra PSOE 1
619 2015-12-01 Navarra UP 2
620 2016-06-01 Navarra OTROS 2
621 2016-06-01 Navarra PSOE 1
622 2016-06-01 Navarra UP 2
623 2019-04-01 Navarra OTROS 2
624 2019-04-01 Navarra PSOE 2
625 2019-04-01 Navarra UP 1
626 2019-11-01 Navarra EH-BILDU 1
627 2019-11-01 Navarra OTROS 2
628 2019-11-01 Navarra PSOE 1
629 2019-11-01 Navarra UP 1
630 2008-03-01 Ourense PP 2
631 2008-03-01 Ourense PSOE 2
632 2011-11-01 Ourense PP 3
633 2011-11-01 Ourense PSOE 1
634 2015-12-01 Ourense OTROS 1
635 2015-12-01 Ourense PP 2
636 2015-12-01 Ourense PSOE 1
637 2016-06-01 Ourense OTROS 1
638 2016-06-01 Ourense PP 2
639 2016-06-01 Ourense PSOE 1
640 2019-04-01 Ourense PP 2
641 2019-04-01 Ourense PSOE 2
642 2019-11-01 Ourense PP 2
643 2019-11-01 Ourense PSOE 2
644 2008-03-01 Palencia PP 2
645 2008-03-01 Palencia PSOE 1
646 2011-11-01 Palencia PP 2
647 2011-11-01 Palencia PSOE 1
648 2015-12-01 Palencia PP 2
649 2015-12-01 Palencia PSOE 1
650 2016-06-01 Palencia PP 2
651 2016-06-01 Palencia PSOE 1
652 2019-04-01 Palencia Cs 1
653 2019-04-01 Palencia PP 1
654 2019-04-01 Palencia PSOE 1
655 2019-11-01 Palencia PP 2
656 2019-11-01 Palencia PSOE 1
657 2008-03-01 Palmas, Las OTROS 1
658 2008-03-01 Palmas, Las PP 3
659 2008-03-01 Palmas, Las PSOE 4
660 2011-11-01 Palmas, Las OTROS 1
661 2011-11-01 Palmas, Las PP 5
662 2011-11-01 Palmas, Las PSOE 2
663 2015-12-01 Palmas, Las Cs 1
664 2015-12-01 Palmas, Las PP 3
665 2015-12-01 Palmas, Las PSOE 2
666 2015-12-01 Palmas, Las UP 2
667 2016-06-01 Palmas, Las Cs 1
668 2016-06-01 Palmas, Las PP 3
669 2016-06-01 Palmas, Las PSOE 2
670 2016-06-01 Palmas, Las UP 2
671 2019-04-01 Palmas, Las Cs 1
672 2019-04-01 Palmas, Las OTROS 1
673 2019-04-01 Palmas, Las PP 1
674 2019-04-01 Palmas, Las PSOE 3
675 2019-04-01 Palmas, Las UP 2
676 2019-11-01 Palmas, Las OTROS 1
677 2019-11-01 Palmas, Las PP 2
678 2019-11-01 Palmas, Las PSOE 3
679 2019-11-01 Palmas, Las UP 1
680 2019-11-01 Palmas, Las VOX 1
681 2008-03-01 Pontevedra BNG 1
682 2008-03-01 Pontevedra PP 4
683 2008-03-01 Pontevedra PSOE 3
684 2011-11-01 Pontevedra BNG 1
685 2011-11-01 Pontevedra PP 5
686 2011-11-01 Pontevedra PSOE 2
687 2015-12-01 Pontevedra OTROS 3
688 2015-12-01 Pontevedra PP 3
689 2015-12-01 Pontevedra PSOE 2
690 2016-06-01 Pontevedra OTROS 2
691 2016-06-01 Pontevedra PP 4
692 2016-06-01 Pontevedra PSOE 2
693 2019-04-01 Pontevedra Cs 1
694 2019-04-01 Pontevedra PP 2
695 2019-04-01 Pontevedra PSOE 3
696 2019-04-01 Pontevedra UP 2
697 2019-11-01 Pontevedra PP 3
698 2019-11-01 Pontevedra PSOE 3
699 2019-11-01 Pontevedra UP 1
700 2008-03-01 Rioja, La PP 2
701 2008-03-01 Rioja, La PSOE 2
702 2011-11-01 Rioja, La PP 3
703 2011-11-01 Rioja, La PSOE 1
704 2015-12-01 Rioja, La PP 2
705 2015-12-01 Rioja, La PSOE 1
706 2015-12-01 Rioja, La UP 1
707 2016-06-01 Rioja, La PP 2
708 2016-06-01 Rioja, La PSOE 1
709 2016-06-01 Rioja, La UP 1
710 2019-04-01 Rioja, La Cs 1
711 2019-04-01 Rioja, La PP 1
712 2019-04-01 Rioja, La PSOE 2
713 2019-11-01 Rioja, La PP 2
714 2019-11-01 Rioja, La PSOE 2
715 2008-03-01 Salamanca PP 2
716 2008-03-01 Salamanca PSOE 2
717 2011-11-01 Salamanca PP 3
718 2011-11-01 Salamanca PSOE 1
719 2015-12-01 Salamanca Cs 1
720 2015-12-01 Salamanca PP 2
721 2015-12-01 Salamanca PSOE 1
722 2016-06-01 Salamanca PP 3
723 2016-06-01 Salamanca PSOE 1
724 2019-04-01 Salamanca Cs 1
725 2019-04-01 Salamanca PP 2
726 2019-04-01 Salamanca PSOE 1
727 2019-11-01 Salamanca PP 2
728 2019-11-01 Salamanca PSOE 1
729 2019-11-01 Salamanca VOX 1
730 2008-03-01 Santa Cruz De Tenerife OTROS 2
731 2008-03-01 Santa Cruz De Tenerife PP 2
732 2008-03-01 Santa Cruz De Tenerife PSOE 3
733 2011-11-01 Santa Cruz De Tenerife OTROS 2
734 2011-11-01 Santa Cruz De Tenerife PP 3
735 2011-11-01 Santa Cruz De Tenerife PSOE 2
736 2015-12-01 Santa Cruz De Tenerife OTROS 1
737 2015-12-01 Santa Cruz De Tenerife PP 2
738 2015-12-01 Santa Cruz De Tenerife PSOE 2
739 2015-12-01 Santa Cruz De Tenerife UP 2
740 2016-06-01 Santa Cruz De Tenerife Cs 1
741 2016-06-01 Santa Cruz De Tenerife OTROS 1
742 2016-06-01 Santa Cruz De Tenerife PP 3
743 2016-06-01 Santa Cruz De Tenerife PSOE 1
744 2016-06-01 Santa Cruz De Tenerife UP 1
745 2019-04-01 Santa Cruz De Tenerife Cs 1
746 2019-04-01 Santa Cruz De Tenerife OTROS 2
747 2019-04-01 Santa Cruz De Tenerife PP 1
748 2019-04-01 Santa Cruz De Tenerife PSOE 2
749 2019-04-01 Santa Cruz De Tenerife UP 1
750 2019-11-01 Santa Cruz De Tenerife OTROS 1
751 2019-11-01 Santa Cruz De Tenerife PP 2
752 2019-11-01 Santa Cruz De Tenerife PSOE 2
753 2019-11-01 Santa Cruz De Tenerife UP 1
754 2019-11-01 Santa Cruz De Tenerife VOX 1
755 2008-03-01 Segovia PP 2
756 2008-03-01 Segovia PSOE 1
757 2011-11-01 Segovia PP 2
758 2011-11-01 Segovia PSOE 1
759 2015-12-01 Segovia PP 2
760 2015-12-01 Segovia PSOE 1
761 2016-06-01 Segovia PP 2
762 2016-06-01 Segovia PSOE 1
763 2019-04-01 Segovia Cs 1
764 2019-04-01 Segovia PP 1
765 2019-04-01 Segovia PSOE 1
766 2019-11-01 Segovia PP 1
767 2019-11-01 Segovia PSOE 1
768 2019-11-01 Segovia VOX 1
769 2008-03-01 Sevilla PP 4
770 2008-03-01 Sevilla PSOE 9
771 2011-11-01 Sevilla OTROS 1
772 2011-11-01 Sevilla PP 5
773 2011-11-01 Sevilla PSOE 6
774 2011-11-01 Sevilla UP 1
775 2015-12-01 Sevilla Cs 2
776 2015-12-01 Sevilla PP 3
777 2015-12-01 Sevilla PSOE 5
778 2015-12-01 Sevilla UP 3
779 2016-06-01 Sevilla Cs 1
780 2016-06-01 Sevilla PP 4
781 2016-06-01 Sevilla PSOE 5
782 2016-06-01 Sevilla UP 3
783 2019-04-01 Sevilla Cs 2
784 2019-04-01 Sevilla PP 2
785 2019-04-01 Sevilla PSOE 6
786 2019-04-01 Sevilla UP 2
787 2019-04-01 Sevilla VOX 1
788 2019-11-01 Sevilla Cs 1
789 2019-11-01 Sevilla PP 2
790 2019-11-01 Sevilla PSOE 6
791 2019-11-01 Sevilla UP 2
792 2019-11-01 Sevilla VOX 2
793 2008-03-01 Soria PP 2
794 2008-03-01 Soria PSOE 1
795 2011-11-01 Soria PP 2
796 2011-11-01 Soria PSOE 1
797 2015-12-01 Soria PP 1
798 2015-12-01 Soria PSOE 1
799 2016-06-01 Soria PP 1
800 2016-06-01 Soria PSOE 1
801 2019-04-01 Soria PP 1
802 2019-04-01 Soria PSOE 1
803 2019-11-01 Soria PP 1
804 2019-11-01 Soria PSOE 1
805 2008-03-01 Tarragona CIU 1
806 2008-03-01 Tarragona PP 1
807 2008-03-01 Tarragona PSOE 4
808 2011-11-01 Tarragona CIU 2
809 2011-11-01 Tarragona PP 2
810 2011-11-01 Tarragona PSOE 2
811 2015-12-01 Tarragona CIU 1
812 2015-12-01 Tarragona Cs 1
813 2015-12-01 Tarragona ERC 1
814 2015-12-01 Tarragona PP 1
815 2015-12-01 Tarragona PSOE 1
816 2015-12-01 Tarragona UP 1
817 2016-06-01 Tarragona CIU 1
818 2016-06-01 Tarragona Cs 1
819 2016-06-01 Tarragona ERC 1
820 2016-06-01 Tarragona PP 1
821 2016-06-01 Tarragona PSOE 1
822 2016-06-01 Tarragona UP 1
823 2019-04-01 Tarragona Cs 1
824 2019-04-01 Tarragona ERC 2
825 2019-04-01 Tarragona OTROS 1
826 2019-04-01 Tarragona PSOE 1
827 2019-04-01 Tarragona UP 1
828 2019-11-01 Tarragona ERC 2
829 2019-11-01 Tarragona OTROS 2
830 2019-11-01 Tarragona PSOE 1
831 2019-11-01 Tarragona UP 1
832 2008-03-01 Teruel PP 1
833 2008-03-01 Teruel PSOE 2
834 2011-11-01 Teruel PP 2
835 2011-11-01 Teruel PSOE 1
836 2015-12-01 Teruel PP 1
837 2015-12-01 Teruel PSOE 1
838 2015-12-01 Teruel UP 1
839 2016-06-01 Teruel PP 2
840 2016-06-01 Teruel PSOE 1
841 2019-04-01 Teruel Cs 1
842 2019-04-01 Teruel PP 1
843 2019-04-01 Teruel PSOE 1
844 2019-11-01 Teruel OTROS 1
845 2019-11-01 Teruel PP 1
846 2019-11-01 Teruel PSOE 1
847 2008-03-01 Toledo PP 3
848 2008-03-01 Toledo PSOE 3
849 2011-11-01 Toledo PP 4
850 2011-11-01 Toledo PSOE 2
851 2015-12-01 Toledo Cs 1
852 2015-12-01 Toledo PP 2
853 2015-12-01 Toledo PSOE 2
854 2015-12-01 Toledo UP 1
855 2016-06-01 Toledo PP 3
856 2016-06-01 Toledo PSOE 2
857 2016-06-01 Toledo UP 1
858 2019-04-01 Toledo Cs 1
859 2019-04-01 Toledo PP 2
860 2019-04-01 Toledo PSOE 2
861 2019-04-01 Toledo VOX 1
862 2019-11-01 Toledo PP 2
863 2019-11-01 Toledo PSOE 2
864 2019-11-01 Toledo VOX 2
865 2008-03-01 Valencia/València PP 9
866 2008-03-01 Valencia/València PSOE 7
867 2011-11-01 Valencia/València OTROS 1
868 2011-11-01 Valencia/València PP 9
869 2011-11-01 Valencia/València PSOE 4
870 2011-11-01 Valencia/València UP 2
871 2015-12-01 Valencia/València Cs 2
872 2015-12-01 Valencia/València PP 5
873 2015-12-01 Valencia/València PSOE 3
874 2015-12-01 Valencia/València UP 6
875 2016-06-01 Valencia/València Cs 2
876 2016-06-01 Valencia/València PP 6
877 2016-06-01 Valencia/València PSOE 3
878 2016-06-01 Valencia/València UP 5
879 2019-04-01 Valencia/València Cs 3
880 2019-04-01 Valencia/València PP 3
881 2019-04-01 Valencia/València PSOE 4
882 2019-04-01 Valencia/València UP 4
883 2019-04-01 Valencia/València VOX 2
884 2019-11-01 Valencia/València Cs 1
885 2019-11-01 Valencia/València PP 4
886 2019-11-01 Valencia/València PSOE 4
887 2019-11-01 Valencia/València UP 4
888 2019-11-01 Valencia/València VOX 3
889 2008-03-01 Valladolid PP 3
890 2008-03-01 Valladolid PSOE 2
891 2011-11-01 Valladolid PP 3
892 2011-11-01 Valladolid PSOE 2
893 2015-12-01 Valladolid Cs 1
894 2015-12-01 Valladolid PP 2
895 2015-12-01 Valladolid PSOE 1
896 2015-12-01 Valladolid UP 1
897 2016-06-01 Valladolid Cs 1
898 2016-06-01 Valladolid PP 2
899 2016-06-01 Valladolid PSOE 1
900 2016-06-01 Valladolid UP 1
901 2019-04-01 Valladolid Cs 1
902 2019-04-01 Valladolid PP 1
903 2019-04-01 Valladolid PSOE 2
904 2019-04-01 Valladolid VOX 1
905 2019-11-01 Valladolid PP 2
906 2019-11-01 Valladolid PSOE 2
907 2019-11-01 Valladolid VOX 1
908 2008-03-01 Zamora PP 2
909 2008-03-01 Zamora PSOE 1
910 2011-11-01 Zamora PP 2
911 2011-11-01 Zamora PSOE 1
912 2015-12-01 Zamora PP 2
913 2015-12-01 Zamora PSOE 1
914 2016-06-01 Zamora PP 2
915 2016-06-01 Zamora PSOE 1
916 2019-04-01 Zamora Cs 1
917 2019-04-01 Zamora PP 1
918 2019-04-01 Zamora PSOE 1
919 2019-11-01 Zamora PP 1
920 2019-11-01 Zamora PSOE 1
921 2019-11-01 Zamora VOX 1
922 2008-03-01 Zaragoza OTROS 1
923 2008-03-01 Zaragoza PP 3
924 2008-03-01 Zaragoza PSOE 3
925 2011-11-01 Zaragoza PP 4
926 2011-11-01 Zaragoza PSOE 2
927 2011-11-01 Zaragoza UP 1
928 2015-12-01 Zaragoza Cs 1
929 2015-12-01 Zaragoza PP 2
930 2015-12-01 Zaragoza PSOE 2
931 2015-12-01 Zaragoza UP 2
932 2016-06-01 Zaragoza Cs 1
933 2016-06-01 Zaragoza PP 3
934 2016-06-01 Zaragoza PSOE 2
935 2016-06-01 Zaragoza UP 1
936 2019-04-01 Zaragoza Cs 1
937 2019-04-01 Zaragoza PP 1
938 2019-04-01 Zaragoza PSOE 3
939 2019-04-01 Zaragoza UP 1
940 2019-04-01 Zaragoza VOX 1
941 2019-11-01 Zaragoza PP 2
942 2019-11-01 Zaragoza PSOE 3
943 2019-11-01 Zaragoza UP 1
944 2019-11-01 Zaragoza VOX 1
945 2008-03-01 Álaba PNV 1
946 2008-03-01 Álaba PP 1
947 2008-03-01 Álaba PSOE 2
948 2011-11-01 Álaba EH-BILDU 1
949 2011-11-01 Álaba PNV 1
950 2011-11-01 Álaba PP 1
951 2011-11-01 Álaba PSOE 1
952 2015-12-01 Álaba PNV 1
953 2015-12-01 Álaba PP 1
954 2015-12-01 Álaba PSOE 1
955 2015-12-01 Álaba UP 1
956 2016-06-01 Álaba PNV 1
957 2016-06-01 Álaba PP 1
958 2016-06-01 Álaba PSOE 1
959 2016-06-01 Álaba UP 1
960 2019-04-01 Álaba EH-BILDU 1
961 2019-04-01 Álaba PNV 1
962 2019-04-01 Álaba PSOE 1
963 2019-04-01 Álaba UP 1
964 2019-11-01 Álaba EH-BILDU 1
965 2019-11-01 Álaba PNV 1
966 2019-11-01 Álaba PSOE 1
967 2019-11-01 Álaba UP 1
968 2008-03-01 Ávila PP 2
969 2008-03-01 Ávila PSOE 1
970 2011-11-01 Ávila PP 2
971 2011-11-01 Ávila PSOE 1
972 2015-12-01 Ávila PP 2
973 2015-12-01 Ávila PSOE 1
974 2016-06-01 Ávila PP 2
975 2016-06-01 Ávila PSOE 1
976 2019-04-01 Ávila Cs 1
977 2019-04-01 Ávila PP 1
978 2019-04-01 Ávila PSOE 1
979 2019-11-01 Ávila PP 1
980 2019-11-01 Ávila PSOE 1
981 2019-11-01 Ávila VOX 1
Fecha Provincia Partido Escaños
1 2008-03-01 Madrid OTROS 2
2 2008-03-01 Madrid PP 18
3 2008-03-01 Madrid PSOE 14
4 2011-11-01 Madrid OTROS 5
5 2011-11-01 Madrid PP 18
6 2011-11-01 Madrid PSOE 9
7 2011-11-01 Madrid UP 2
8 2015-12-01 Madrid Cs 7
9 2015-12-01 Madrid PP 13
10 2015-12-01 Madrid PSOE 6
11 2015-12-01 Madrid UP 10
12 2016-06-01 Madrid Cs 6
13 2016-06-01 Madrid PP 15
14 2016-06-01 Madrid PSOE 7
15 2016-06-01 Madrid UP 8
16 2019-04-01 Madrid Cs 8
17 2019-04-01 Madrid PP 7
18 2019-04-01 Madrid PSOE 10
19 2019-04-01 Madrid UP 6
20 2019-04-01 Madrid VOX 5
21 2019-11-01 Madrid Cs 3
22 2019-11-01 Madrid MP 2
23 2019-11-01 Madrid PP 9
24 2019-11-01 Madrid PSOE 10
25 2019-11-01 Madrid UP 5
26 2019-11-01 Madrid VOX 7
FIN